\chapter{システムデバッグモード}
\section{システムデバッグモードとは?}
\indy{しすてむてはつくもうと}{システムデバッグモード}は Dragon Script
の開発者向けのモードです。Dragon Script を 
\begin{lstlisting}
$ cmake .. -DCMAKE_BUILD_TYPE=Debug
\end{lstlisting}
のようにデバッグビルドをした場合のみ使えます。内容は単に GNU の
ソースレベルデバッガ GDB を利用して Dragon Script を起動し直す
だけです。また、Valgrind を利用してメモリチェックも行えます。
インストール時に検索しないため、どちらもあらかじめパスが通った
ところに置いておく必要があります。

\section{起動方法}
以下のようにします。
\begin{lstlisting}
$ cdragon --system-debug
$ gdragon --system-debug
$ kdragon --system-debug
\end{lstlisting}
とします。必ず端末上で起動してください。

\section{起動後の操作}
まず、
\begin{lstlisting}
竜: どちらを使うんだ?
	g: GNU Debugger (gdb)
	v: Valgrind
答え> 
\end{lstlisting}
と質問しますので、使いたい方を選択して Enter を押してください。

次に、Valgrind の場合には
\begin{lstlisting}
竜: Dragon Script に渡すオプションを入力してくれ。
	c: この起動時に渡した引数を使う
入力>
\end{lstlisting}
と質問します。\texttt{c} とだけ入力するかオプションやスクリプトファイルを入力して
 Enter を押してください。なお、\texttt{c} を指定した場合、\ 
\verb+--system-debug+ は渡されません。

最後に gdb または Valgrind に渡すオプションを指定してください。
\begin{lstlisting}
竜: gdb に渡すオプションを指定してくれ。
	c: この起動時に渡した引数を使う
	?: ヘルプを表示
入力>
\end{lstlisting}
\begin{lstlisting}
竜: Valgrind に渡すオプションを指定してくれ。
	?: ヘルプを表示
入力>
\end{lstlisting}
\texttt{?} を入力するとそれぞれ
\begin{lstlisting}
$ gdb --help
$ valgrind --help
\end{lstlisting}
と同じ結果が得られます。\texttt{?} 以外を入力すると それぞれ起動します。

なお、gdb で、Dragon Script に渡すオプションを指定する場合は、
gdb 起動後の \texttt{run} 命令に付けます。
\begin{lstlisting}
(gdb) run [Dragon Script に渡すオプション]
\end{lstlisting}
gdb の使い方は gdb のマニュアルをご覧ください。

